/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.indicadores.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.indicadores.vo.ObjetivoIndicadorVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * Data Access Object da entidade ObjetivoIndicador. Essa classe é responsável por todas as 
 * operações de banco de dados relacionadas à entidade.
 * 
 * @author Marcos Mello Nobrega Soares 20136178
 */
public class ObjetivoIndicadorDAO extends BaseDAO<ObjetivoIndicadorVO> {

    @Override
    public void inserir(ObjetivoIndicadorVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TA_ObjetivoIndicador(CD_Indicador, CD_Objetivo)");
        query.append("VALUES (?, ?)");

        List<?> parametros = criarParametros(entidade.getCdIndicador(), entidade.getCdObjetivo());

        executarInsercao(query.toString(), parametros);
    }

    @Override
    public void alterar(ObjetivoIndicadorVO entidade) {        
        return; 
    }

    @Override
    public void excluir(ObjetivoIndicadorVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TA_ObjetivoIndicador");
        query.append("WHERE CD_Indicador = ?");
        query.append("AND CD_Objetivo = ?");

        executarAlteracao(query.toString(), criarParametros(entidade.getCdIndicador(), entidade.getCdObjetivo()));
    }

    @Override
    public ObjetivoIndicadorVO consultarPorId(Serializable id) {        
        return null;
    }

    @Override
    public List<ObjetivoIndicadorVO> consultarPorExemplo(ObjetivoIndicadorVO exemplo) {

        List<ObjetivoIndicadorVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TA_ObjetivoIndicador T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

    @Override
    protected ObjetivoIndicadorVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        ObjetivoIndicadorVO entidade = new ObjetivoIndicadorVO();
        
        entidade.setCdIndicador(new Integer(rs.getInt("CD_Indicador")));
        entidade.setCdObjetivo(new Integer(rs.getInt("CD_Objetivo")));

        return entidade;
    }

    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, ObjetivoIndicadorVO exemplo) {
        
        if (exemplo.getCdIndicador() != null) {
            query.append("AND T.CD_Indicador = ?");
            adicionarParametro(exemplo.getCdIndicador());
        }
        
        if (exemplo.getCdObjetivo() != null) {
            query.append("AND T.CD_Objetivo = ?");
            adicionarParametro(exemplo.getCdObjetivo());
        }
    }
}
